HTML formları aracılığı ile, kullanıcılar bilgisayarlarındaki tarayıcıda açtıkları bir web sayfası üzerinden yaptıkları veri girişlerini bir sunucuya gönderebilirler. Farklı bir ifade ile; web sayfasında yapılan işlemler kullanıcı tarafından girilen verileri esas alır. Örneğin, e-posta göndermek gibi.
Bir HTML form üzerinde kullanıcının veri girişi yapabilmesi için gerekli olan text, checkbox, radio, textarea, select, file gibi veri giriş alanları ile formu göndermeye yarayan submit butonu yer alır.
Form veri giriş alanları <form> ve </form> etiketleri arasında yer alır.
HTML formları aracılığı ile bir bilgi gönderebilmek ve işlem yapabilmek için, bu formun içinde yer aldığı bir dosya ile gönderilen formda yer alan bilgilere işlem yapacak bir dosya gerekir.
Aşağıdaki örnekte, form.php adlı dosyada, bir form içinde bir metin veri giriş alanı ile bir submit butonu bulunmaktadır.
form.php
<html>
<body>
<form method="post" action="formislem.php">
Adı: <input type="text" id="adi" name="adi">
<input type="submit" value="Gönder">
</form>
</body>
</html>
method : Formdaki verilerin kullanma yöntemi (post veya get)
action : Formdaki verilerin gönderileceği dosya
type : Veri giriş alanının türünü belirler.
name : Veri giriş alanının adı (Mutlaka tanımlanmalıdır, çünkü $_POST dizini içindeki değişken adını oluşturur.)
Yukarıdaki dosyayı çalıştırdığımızda, web tarayıcımızda aşağıdaki ifadeler karşımıza çıkar:
Veri giriş alanına "Ahmet" yazıp butona tıkladığınızda, form içindeki veriler post yöntemi ile formislem.php dosyası otomatik olarak açılır ve bilgiler dosyaya gönderilir.
formislem.php (Aktarılan dosya)
<html>
<body>
<?php
echo 'Adı: ' . htmlspecialchars($_POST['adi']);
?>
</body>
</html>
Yukarıdaki form.php dosyasında veri giriş alanına "Ahmet" değerini girip submit butonuna bastığınızda, formislem.php dosyası çağrılır ve web tarayıcınızda aşağıdaki ifadeler karşınıza çıkar:
Adı: Ahmet
formislem.php dosyasında kullanılan htmlspecialchars() fonksiyonu HTML'de kullanılan özel karakterleri uygun bir şekilde çevirerek, HTML etiketleri veya Javascript yoluyla PHP sayfasına yapılabilecek muhtemel güvenlik saldırılarını önler.
Dosya içindeki $_POST['adi'] değişken değeri PHP tarafından otomatik olarak atanır. Aynı değişken değerine $_REQUEST['adi'] yoluyla da erişmek mümkündür.
Form işlemlerinde tek dosya kullanma
Eğer, aynı dosyada hem form bilgilerini koymak hem de form bilgilerine işlem yapmak istersek, çalışmakta olan PHP dosyasının yol tanımlamasını veren $_SERVER['PHP_SELF'] değişkenini kullanabiliriz.
form.php
<html>
<body>
<?php
if (!empty($_POST['adi'])) {
echo 'Adı: ' . htmlspecialchars($_POST['adi']);
}
else {
echo '<form method="post" action="' . htmlspecialchars($_SERVER["PHP_SELF"]) . '">
Adı: <input type="text" id="adi" name="adi">
<input type="submit" value="Gönder">
</form>';
}
?>
</body>
</html>
Veri giriş alanına "Ahmet" yazıp butona tıkladığınızda, bu kez form içindeki verileri dosya post yöntemi ile kendi kendine gönderir.
Form verilerinin gönderilmesinde $_GET değişkenini kullanma
Form verilerini göndermek için POST yöntemini kullandığınızda, forma işlem yapacak dosyaya gönderilecek değişken değerleri HTTP POST yöntemi ile $_POST değişken dizisine aktarılır. GET yöntemini kullandığınızda ise, URL parameterleri ile $_GET değişken dizisine aktarılır.
POST yöntemini kullandığınızda, tüm veriler dosyanın içinde gönderildiğinden, kullanıcılar verileri göremezler ve veri boyutu ile ilgili herhangi bir sınırlama yoktur.
GET yöntemini kullandığınızda, gönderilen değişken adları ve değerleri adres satırında URL'nin bir parçası olarak görünür. Ayrıca, bu yöntemde göderilebilecek karakter sayısı sınırlıdır. Kullanıcılar tarafından görülmesini istemediğiniz veya büyük boyutlu verileri aktarırken GET yöntemini kullanmamanız önerilir.
form.php
<html>
<body>
<form method="get" action="formislem.php">
Adı: <input type="text" id="adi" name="adi">
<input type="submit" value="Gönder">
</form>
</body>
</html>
method : Formdaki verilerin kullanma yöntemi (Burada get kullanılıyor.)
Yukarıdaki dosyayı tarayıcımızda çalıştırdığımızda karşımıza aşağıdaki görüntü gelir:
Veri giriş alanına "Ahmet" yazıp butona tıkladığınızda, form içindeki veriler get yöntemi ile formislem.php dosyası otomatik olarak açılır ve bilgiler dosyaya gönderilir.
formislem.php (Aktarılan dosya)
<html>
<body>
<?php
echo 'Adı: ' . htmlspecialchars($_GET['adi']);
?>
</body>
</html>
Yukarıdaki form.php dosyasında veri giriş alanına "Ahmet" değerini girip submit butonuna bastığınızda, formislem.php dosyası çağrılır ve web tarayıcınızda aşağıdaki ifadeler karşınıza çıkar:
Adı: Ahmet
GET yöntemi kullanıldığında, formislem dosyası otomatik olarak çağrıldığında, tarayıcının adres satırında aşağıdaki ifadeler görülecektir:
/formislem.php?adi=Ahmet
Dosya içindeki $_GET['adi'] değişken değeri PHP tarafından otomatik olarak atanır. Aynı değişken değerine $_REQUEST['adi'] yoluyla da erişmek mümkündür.
Form veri giriş alanları
Form veri giriş alanları temel olarak 2 ana gruba ayrılabilir:
1. <input> etiketinin type özelliği ile elde edilen veri giriş yöntemleri
2. Diğer form etiketleri ile elde edilen veri giriş yöntemleri
<input> etiketi ile kullanılan bazı type değerleri ile diğer form etiketlerinin bazıları HTML5 ile birlikte eklenmiş olup, <input> etiketi ile kullanılan bazı type değerleri de bazı modern web tarayıcıları tarafından desteklenmemektedir.
<input> | Diğer | ||
---|---|---|---|
button | Tıklanabilir bir buton oluşturur. | <button> | Tıklanabilir bir buton oluşturur. |
checkbox | Bir checkbox oluşturur. | <datalist> | <input> elemanları için önceden tanımlanmış seçenekler oluşturur. |
color | Bir renk seçici oluşturur. | <fieldset> | Bir formdaki ilişkili elemanları gruplandırır. |
date | Bir tarih kontrolü oluşturur. | <keygen> | Formlar için parola oluşturma alanı oluşturur. |
datetime | Bir tarih ve zaman kontrolü oluşturur. | <label> | <input> elemanı için bir etiket oluşturur. |
datetime-local | Lokal bir tarih ve zaman kontrolü oluşturur. | <legend> | <fieldset> elemanı için bir başlık oluşturur. |
Bir e-posta alanı oluşturur. | <optgroup> | Bir açılır listedeki ilişkili seçenekleri bir grup altında toplar. | |
file | Dosya yükleme için bir dosya seçme alanı ve arama butonu oluşturur. | <option> | Bir açılır listede seçenek oluşturur. |
hidden | Gizli bir veri giriş alanı oluşturur. | <output> | Bir hesaplamanın sonucunu oluşturur. |
image | Submit butonu olarak bir resim oluşturur. | <select> | Bir açılır liste oluşturur. |
month | Bir ay ve yıl kontrolü oluşturur. | <textarea> | Çok satırlı bir veri giriş kontrolü oluşturur. |
number | Sayı girişi için bir alan oluşturur. | ||
password | Bir parola alanı oluşturur. | ||
radio | Bir radio butonu oluşturur. | ||
range | Tam değeri önemli olmayan bir sayı girişi için bir alan oluşturur. | ||
reset | Tüm form değerlerine ön tanımlı değerleri atayan bir buton oluşturur. | ||
search | Bir arama karakter dizisi girmek için bir metin alanı oluşturur. | ||
submit | Bir submit butonu oluşturur. | ||
tel | Bir telefon numarası giriş alanı oluşturur. | ||
text | Ön tanımlı genişliği 20 karakter olan tek satırlık metin giriş alanı oluşturur. | ||
time | Zaman girişi için bir kontrol oluşturur. | ||
url | URL girişi için bir alan oluşturur. | ||
week | Bir hafta ve yıl kontrolü oluşturur. |
PHP'de, bir PHP sayfasına $_GET veya $_POST değişken dizileri yoluyla gönderilen form değerlerine, PHP sayfası içinde yine $_GET veya $_POST değişken dizileri yoluyla erişim sağlanarak işlem yapılabilir.
<input> elemanı, type özelliğinin aldığı değere bağlı olarak farklı türde veri girişi için kullanılmaktadır. type özelliği button, checkbox, file, password, radio, submit, text gibi değerler alabilmektedir.
Aşağıdaki form.php adlı dosyada, bir form içinde text, button, hidden, checkbox, file, radio ve submit type özellikleri içeren <input> elemanları bulunmaktadır.
form.php
<html>
<body>
<form method="post" action="formislem.php" enctype="multipart/form-data">
Adı: <input type="text" id="adi" name="adi"> <input type="button" id="badi" name="badi" value="İsim ver" onclick="document.getElementById('adi').value='Ahmet'"><br/>
<input type="hidden" id="hdeger" name="hdeger" value="gizlideger">
<input type="checkbox" id="medenihal" name="medenihal" value="Evli"> Evli<br/>
Bir dosya seçiniz: <input type="file" id="fdosya" name="fdosya"><br/>
<input type="radio" name="meslek" value="Öğretmen"> Öğretmen<br/>
<input type="radio" name="meslek" value="Avukat"> Avukat<br/>
<input type="radio" name="meslek" value="Esnaf"> Esnaf<br/><br/>
<input type="submit" value="Gönder">
</form>
</body>
</html>
Yukarıdaki dosyayı çalıştırdığımızda, web tarayıcımızda aşağıdaki ifadeler karşımıza çıkar:
Karşınıza gelen ekranda, "İsim ver" butonuna tıkladığınızda, ilk veri giriş alanına "Ahmet" değerini atar (Javascript ile). Evli ifadesinin sol tarafındaki kutuyu seçtikten, Gözat butonuna basıp bir dosya seçtikten ve Öğretmen ifadesini seçtikten sonra "Gönder" butonuna tıklarsanız, <input> elemanının farklı type değerleri ile elde edilen veriler post yöntemi ile formislem.php dosyasına gönderilecektir. hdeger adlı veri giriş alanında bulunan "gizlideger" değeri de, kullanıcı tarafından görülmediği halde aktarılır.
formislem.php (Aktarılan dosya)
<html>
<body>
<?php
echo 'Adı: ' . htmlspecialchars($_POST['adi']) . '<br/>';
echo 'Gizli değer: ' . htmlspecialchars($_POST['hdeger']) . '<br/>';
echo 'Medeni hali: ' . htmlspecialchars($_POST['medenihal']) . '<br/>';
echo 'Meslek: ' . htmlspecialchars($_POST['meslek']) . '<br/>';
echo 'Dosya adı: ' . htmlspecialchars($_FILES['fdosya']['name']) . '<br/>';
echo 'Dosya türü: ' . htmlspecialchars($_FILES['fdosya']['type']) . '<br/>';
echo 'Dosya boyutu: ' . htmlspecialchars($_FILES['fdosya']['size']) . '<br/>';
echo 'Dosya geçici adı: ' . htmlspecialchars($_FILES['fdosya']['tmp_name']);
?>
</body>
</html>
Adı: Ahmet Gizli değer: gizlideger Medeni hali: Evli Meslek: Öğretmen Dosya adı: deneme.txt Dosya türü: text/plain Dosya boyutu: 40 Dosya geçici adı: C:\wamp\tmp\phpBB50.tmp
$_FILES değişkeni, web tarayıcısında açılan aktif PHP sayfasına HTTP POST metodu yoluyla upload edilen dosya ile ilgili bilgileri içeren değişkenler dizisidir. Değişken içindeki değerler, dosyanın adını, boyutunu, tipini, geçici olarak verilen dosya adını ve eğer varda meydana gelen hata kodunu içerir.
<button>, <datalist>, <fieldset>, <keygen>, <label>, <legend>, <optgroup>, <option>, <output>, <select>, <textarea> etiketlerini kullanarak form üzerinden veri gönderebilirsiniz.
form.php
<html>
<body>
<form method="post" action="formislem.php" enctype="multipart/form-data">
<fieldset>
<legend>Personel bilgileri</legend>
<label for="adi">Adı: </label> <input type="text" id="adi" name="adi" list="isimler"> <button type="button" id="badi" name="badi" onclick="document.getElementById('adi').value='Ahmet'">İsim ver</button><br/><br/>
<datalist id="isimler">
<option value="Ahmet">
<option value="Mehmet">
<option value="Necati">
<option value="Nedim">
</datalist>
<textarea id="bilgi" name="bilgi" rows="5" cols="30"></textarea><br/><br/>
<select id="kadi" name="kadi">
<optgroup label="Öğretmen">
<option value="Mehmet">Mehmet</option>
<option value="Sedat">Sedat</option>
<option value="Vedat">Vedat</option>
</optgroup>
<optgroup label="Öğrenci">
<option value="Ahmet">Ahmet</option>
<option value="Mert">Mert</option>
<option value="Murat">Murat</option>
</optgroup>
</select>
</fieldset><br/>
<button type="submit">Gönder</button>
</form>
</body>
</html>
Yukarıdaki dosyayı çalıştırdığımızda, web tarayıcımızda aşağıdaki ifadeler karşımıza çıkar:
Karşınıza gelen ekranda, "İsim ver" butonuna tıkladığınızda, ilk veri giriş alanına "Ahmet" değerini atar (Javascript ile). Metin giriş alanına "Ahmet bir öğrencidir." ifadesini girer ve en alttaki kutuda "Ahmet" seçeneneğini seçtikten sonra "Gönder" butonuna tıklarsanız, veriler post yöntemi ile formislem.php dosyasına gönderilecektir.
formislem.php (Aktarılan dosya)
<html>
<body>
<?php
echo 'Adı: ' . htmlspecialchars($_POST['adi']) . '<br/>';
echo 'Bilgi: ' . htmlspecialchars($_POST['bilgi']) . '<br/>';
echo 'Seçenek adı: ' . htmlspecialchars($_POST['kadi']);
?>
</body>
</html>
Adı: Ahmet Bilgi: Ahmet bir öğrencidir. Seçenek adı: Ahmet